// pages/cart/index.js
import {
  openSetting,
  getSetting,
  chooseAddress,
  showModal,
  showToast
} from "../../utils/asyncWx.js";
Page({
  /**
   * 页面的初始数据
   */
  data: {
    cart: [],
    address: {},
    totalPrice: 0,
    totalNum: 0,
    allChecked: false,
  },
  onShow: function () {
    let cart = wx.getStorageSync("cart") || [];
    let address = wx.getStorageSync("address");
    if (address) {
      address.all =
        address.provinceName +
        address.cityName +
        address.countyName +
        address.detailInfo;
    }
    this.setData({
      address,
    });
    this.setCart(cart);
  },
  // 商品选中事件
  handleItemChange(e) {
    let { index } = e.currentTarget.dataset;
    let cart = wx.getStorageSync("cart") || [];
    cart[index].checked = !cart[index].checked;
    this.setCart(cart);
  },
  // 设置购物车状态同时，重新计算底部工具栏数据/全选/总价格购买的数量
  setCart(cart) {
    // 总价格 总数量
    let totalPrice = 0;
    let totalNum = 0;
    let allChecked = true;
    // 遍历商品数据
    cart.forEach((element) => {
      if (element.checked) {
        // 计算选中商品价格
        totalPrice += element.num * element.goods_price;
        totalNum = element.num;
      } else {
        allChecked = false;
      }
    });
    // 判断数组是否为空
    allChecked = cart.length != 0 ? allChecked : false;
    this.setData({
      cart,
      allChecked,
      totalNum,
      totalPrice,
    });
    wx.setStorageSync("cart", cart);
  },
  // 收货地址点击事件
  async hangdleChooseAddress() {
    // 获取当前用户权限状态
    // wx.getSetting({
    //   success: (result) => {
    //     // 获取权限发现一些属性名怪异的时候，使用 [] 形式获取属性值
    //     let scopeAddress = result.authSetting["scope.address"];
    //     // 判断权限状态
    //     if (scopeAddress === true || scopeAddress === undefined) {
    //       // 获取收货地址
    //       wx.chooseAddress({
    //         success: (result1) => {
    //           console.log(result1);
    //         },
    //       });
    //     } else {
    //       // 用户拒绝授予权限，诱导用户打开授权页面，开启授权，开启后才可进入获取收货地址
    //       wx.openSetting({
    //         success: (result2) => {
    //           // 获取收货地址
    //           wx.chooseAddress({
    //             success: (result3) => {
    //               console.log(result3);
    //             },
    //           });
    //         },
    //       });
    //     }
    //   },
    // });
    try {
      // 1.获取权限状态
      const res1 = await getSetting();
      let scopeAddress = res1.authSetting["scope.address"];
      // 2.判断权限状态
      if (scopeAddress === false) {
        // 用户拒绝授予权限，诱导用户打开授权页面，开启授权，开启后才可进入获取收货地址
        await openSetting();
      }
      // 获取收货地址
      const address = await chooseAddress();
      wx.setStorageSync("address", address);
    } catch (err) {
      console.log(err);
    }
  },
  // 全选反选事件
  handleCheckedAll() {
    let { cart } = this.data;
    let allChecked = !this.data.allChecked;
    cart.forEach((element) => (element.checked = allChecked));
    // this.setData({
    //   allChecked
    // });
    this.setCart(cart);
  },
  // 商品数量 -1
  handleNumReduce(e) {
    let { index } = e.currentTarget.dataset;
    this.setNum(-1, index);
  },
  // 商品数量 +1
  handleNumPush(e) {
    let { index } = e.currentTarget.dataset;
    this.setNum(+1, index);
  },
  // 商品数量计算
  async setNum(addNum, index) {
    let cart = wx.getStorageSync("cart") || [];
    // 判断商品数量是否要删除
    if (cart[index].num === 1 && addNum === -1) {
      // wx.showModal({
      //   title: '提示',
      //   content: '您是否要删除?',
      //   success: (result) => {
      //     if (result.confirm) {
      //       cart.splice(index, 1)
      //       this.setCart(cart)
      //     } else if (result.cancel) {
      //     }
      //   }
      // });
      // 语法优化
      // 调用 Promise 语法显示弹窗
      let result = await showModal({ content: "您是否要删除?" });
      if (result.confirm) {
        cart.splice(index, 1);
        this.setCart(cart);
      }
    } else {
      cart[index].num = cart[index].num + addNum;
      this.setCart(cart);
      wx.setStorageSync("cart", cart);
    }
  },
  // 支付界面跳转,调用 Promise 封装的 showToast 方法
 async handlePay() {
  //  判断收货地址是否授权
    let { totalNum, address } = this.data;
    if (!address.userName) {
      await showToast({title:'收货地址不能为空'})
      return;
    }
    // 判断商品是否为空
    if(!totalNum){
      await showToast({title:'商品数量不能为0'})
      return;
    }
    // 跳转支付界面
    wx.navigateTo({
      url: '/pages/pay/index',
    });
      
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {},

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {},

  /**
   * 生命周期函数--监听页面显示
   */

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {},

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {},

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {},

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {},

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {},
});
